/* 实用类功能实现
    1.获取当前时间
    2.判断文件是否存在
    3.获取文件的所在目录
    4.创建目标文件
*/  
#ifndef __M_UTIL_H__
#define __M_UTIL_H__

#include <iostream>
#include <ctime>
#include <string>
#include <sys/stat.h>

namespace mylog{
    namespace util{
        class Data{
        public:
            static time_t now(){
                return time(nullptr);
            }
        };
 
        class File{
        public:
            static bool exists(const std::string &filename){
                struct stat st;
                // 通过stat函数的返回值来判断文件是否存在
                return (stat(filename.c_str(), &st) == 0);
            }
            static std::string path(const std::string &filename){
                if(filename.empty()){
                    return ".";
                }
                size_t pos = filename.find_last_of("/\\");
                if (pos == std::string::npos){
                    return ".";
                }
                return filename.substr(0, pos + 1);
            }
            static void createdirectory(const std::string &path){
                if(path.empty()){
                    return;
                }
                if(exists(path)){
                    return;
                }

                size_t pos = 0, idx = 0;
                while (idx < path.size()){
                    pos = path.find_first_of("/\\", idx);
                    // 如果没找到直接在当前目录下创建该文件 并结束
                    if (pos == std::string::npos){
                        mkdir(path.c_str(), 0755);
                        return;
                    }
                    if (pos == idx){
                        idx = pos + 1;
                        continue;
                    }

                    std::string subdir = path.substr(0, pos);
                    // 判断子串对应的文件是否等于. / .. 以及是否存在
                    if (subdir == "." || subdir == ".." || exists(subdir)){
                        idx = pos + 1;
                        continue;
                    }
                    mkdir(subdir.c_str(), 0755);
                    idx = pos + 1;
                }
            }
        };
    }
}

#endif